﻿/*
	File: CEngine.h

	Leírás: Feladata IEngine interface megvalósítása, és az ablakot is ő kezeli

	Szerzõ: S. Csaba

*/

#ifndef __CENGINE_H__
#define __CENGINE_H__
#include <Windows.h>
#include "..\Includes\Includes.h"
#include "..\Includes\ICamera.h"
#include "..\Util\Utilities.h"
#include "CDevice.h"
#include "CRenderer.h"
#include "CInput.h"
#include "..\Content\CCamera.h"
#include "..\Content\CResourceManager.h"

namespace Engine
{

	class CEngine : public IEngine
	{
	public:
    virtual ~CEngine();
    // ablak id lekérdezése
	  virtual HWND getWindowIdentifier();

    // világ update, input érzékelés, fizika alkalmazása
    virtual void update();

	  // renderelés
	  virtual void render();

	  // memória tisztítás
	  virtual void cleanUp();

    // kamera beállítása
    virtual void setCamera(ICamera* pCam);

    // képernyő szélességének lekérdezése
    virtual int getScreenWidth();

    // képernyő magasságának lekérdezése
    virtual int getScreenHeight();

    // égbolt textúrájának beállítása
    virtual void setSkyBoxTexture(std::string texture_in);


		// motor létrehozása
    static IEngine* getInstance(HINSTANCE hInst, HINSTANCE hPrevInst, wchar_t * lpCmdLine, int nCmdShow,WNDPROC MsgProc,const char * title,const char * title2);
	private:
		CEngine(HINSTANCE hInst, HINSTANCE hPrevInst, wchar_t * lpCmdLine, int nCmdShow,WNDPROC MsgProc,const char * title,const char * title2);

    // ablak létrehozása
		bool createWindow(WNDPROC MsgProc);

		// egyke
		static CEngine* pInstance;

		// konzol paraméterek
		HINSTANCE hInst;
		HINSTANCE hPrevInst;
		wchar_t* lpCmdLine;
		int nCmdShow;
		HINSTANCE hInstance;

		// window azonosító
		HWND hWnd;

		// titles
		const char* windowName;
		const char* title;

		// 3d eszköz
		CDevice* pDevice;

 		// renderer
		CRenderer* pRenderer;

    // input
    CInput* pInput;

    Content::CResourceManager* pResourceManager;
    CTimer* pTimer;
	};
}
#endif